package com.crcode.crm.dao.data;

import java.util.List;
import java.util.Map;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import com.crcode.crm.bean.data.ProjectBean;

/**
 * 项目数据访问接口
 * @author cl
 * @date 2019年3月25日
 */
public interface ProjectDao extends JpaRepository<ProjectBean, Integer>, JpaSpecificationExecutor<ProjectBean> {
	
	/**
	 * 根据UUID查询
	 * @param uuid
	 * @return
	 */
	public ProjectBean findByUuid(String uuid);
	
	/**
	 * 根据项目名称和企业UUID查询
	 * @param proName
	 * @param entUuid
	 * @return
	 */
	public ProjectBean findByProNameAndEntUuid(String proName,String entUuid);
	
	/**
	 * 根据序号单一、批量删除返回操作结果数
	 * @author cl
	 * @date 2019年3月25日
	 * @param ids
	 * @return
	 */
	public long deleteByIdIn(List<Integer> ids);
	
	 /**
     * 根据序号集查询
     * @author lxw
     * @date 2019年4月9日
     * @param id
     * @return
     */
    public List<ProjectBean> findByUuidIn(List<String> uuids);


	/**
	 * 根据企业的uuid删除项目
	 * @param uuidList 企业的uuid，可以删除多个企业的关联项目
	 * @return long 删除数量
	 */
	long deleteByEntUuidIn(List<String> uuidList);

	/**
	 * 根据企业uuid查找项目
	 * @param uuidList 企业的uuid
	 * @return List<ProjectBean>
	 */
	List<ProjectBean> findByEntUuidIn(List<String> uuidList);


	/**
	 * 根据用户/创建时间统计项目数量,按天统计
	 * @return List<Map<String, Object>>
	 */
	@Query(value = "select * " +
			"from " +
			"(SELECT DATE_FORMAT(create_time,\"%Y-%m-%d\") AS name, count(id) AS value " +
			"FROM `data_project` " +
			"WHERE (?1 IS NOT NULL AND create_user_uuid=?1 ) OR (?1 IS null) " +
			"GROUP BY DATE_FORMAT(create_time,\"%Y-%m-%d\") " +
			") as result " +
			"order by name asc", nativeQuery = true)
	List<Map<String, Object>> aggsProByUserCreateTime(String uuid);
	
	
	/**
	 * 根据资源uuid集改变状态
	 * @author lxw
	 * @date 2019年4月19日
	 * @param proStats
	 * @param uuid
	 * @return
	 */
	@Modifying
	@Query("update ProjectBean p set p.proStats = ?1  where p.uuid in ?2")
	public int updateProStatsByUuids(Integer proStats,List<String> uuid);
	
	/**
	 * 根据序号集和改变责任人
	 * @author lxw
	 * @date 2019年4月26日
	 * @param userUuid
	 * @param userName
	 * @param uuid
	 * @return
	 */
	@Modifying
	@Query("update ProjectBean p set p.liableUserUuid = ?1, p.liableUserName = ?2 where p.uuid in ?3")
	public int updateProLiableUserByUuids(String userUuid,String userName,List<String> uuid);
}
